package com.sun.temp.task;

import com.sun.temp.common.result.Result;
import com.sun.temp.mapper.mapper1.FailLogDao;
//import com.sun.temp.netty.NettyClient;
//import com.sun.temp.netty.NettyManager;
import com.sun.temp.utils.PLCUtil;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

import static java.lang.Thread.sleep;
//
//@Slf4j
//public class MyRunnable implements Runnable {
//
//    @Resource
//    private FailLogDao failLogDao;
//
//    @Resource
//    private NettyManager nettyManager;
////    @Resource
////    private NettyClient nettyClient;
//
//    private static Map<String, Integer> cacheMap = new HashMap<>();
//
//    @Override
//    public void run() {
//                               // 这里@Resource导入的nettyClient为null, new一个
//        NettyClient nettyClient = new NettyClient();
//        // 接收VW1004
//        int result = PLCUtil.readUInt16("VW1004");
//        log.info("result =====================：{}" + result);
//        if (cacheMap.get("result") != null && cacheMap.get("result") == result) {
//            return;
//        } else {
//            cacheMap.put("result", result);
//        }
//
//        if (result == 1) {
//            try {
//                // 接受 为1-上料机反馈上料准备好
//                log.info("接受 为1-上料机反馈上料准备好");
//                sleep(2000);
//                // 发送：为1-上位机发送物料到视觉检测
//                PLCUtil.writeInt16("VW1002", 1);
//                log.info("发送 为1-上位机发送物料到视觉检测");
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        } else if (result == 2) {
//            try {
//                // 为2-上料机反馈上料到视觉能检测
//                log.info("接受 为2-上料机反馈上料到视觉能检测");
//                sleep(2000);
//                nettyClient.sendMessage("T1\r");
//                log.info("TCP 发送视觉识别请求T1，等待回复 ==============================");
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        } else if (result == 3) {
//            try {
//                // 为3-上料到玻璃管
//                log.info("接受 为3-上料到玻璃管");
//                // 执行RPA，操作顶针下压
//                log.info("执行RPA,顶针下压");
//                needlePress();
//                // 判断延时XX秒
//                log.info("判断延时XX秒");
//                // 这里，脚本里做延时了，顶针下压操作，40秒，结束后关闭窗口
//                // 发送 为3-上位机顶针下降压紧之后发送机器人去安全位
//                PLCUtil.writeInt16("VW1002", 3);
//                log.info("发送 为3-上位机顶针下降压紧之后发送机器人去安全位");
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        } else if (result == 4) {
//            // 为4-机器人已经去安全位
//            log.info("接受 为4-机器人已经去安全位");
//            // 为4-上位机发送加热炉上升
//            PLCUtil.writeInt16("VW1002", 4);
//            log.info("发送 为4-上位机发送加热炉上升");
//        } else if (result == 5) {
//            // 为5-加热炉上升完毕反馈可以加热
//            log.info("接受 为5-加热炉上升完毕反馈可以加热");
//            // TODO 需要延时
//            try {
//                sleep(5000);
//                // 为5-上位机发送加热
//                PLCUtil.writeInt16("VW1002", 5);
//                try {
//                    log.info("点击加热=======================================================");
//                    startHeating();
//                } catch (Exception e) {
//                   e.printStackTrace();
//               }
//                log.info("发送 为5-上位机发送加热");
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        } else if (result == 6) {
//            // 为6-加热炉下降完毕
//            log.info("接受 为6-加热炉下降完毕");
//            // 为7-可以下料
//            try {
//                // 风扇吹，温度下降到40度再去夹料，这里延时10分钟
//                sleep(600000);
//                PLCUtil.writeInt16("VW1002", 7);
//                log.info("发送 为7-可以下料");
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        } else if (result == 7) {
//            try {
//                // 为7机器人下料玻璃管夹取料
//                log.info("接受 为7机器人下料玻璃管夹取料");
//                // RPA执行顶针move
//                needleMove();
//                log.info("执行RPA顶针上升");
//                // 为8-顶针上升完毕可以抓料去丢弃
//                PLCUtil.writeInt16("VW1002", 8);
//                log.info("发送 为8-顶针上升完毕可以抓料去丢弃");
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        } else if (result == 8) {
//            // 为8-丢弃料去初始位
//            log.info("接受 为8-丢弃料去初始位");
//            // TODO 延时
//            // 顶针落下
//            try {
//                sleep(5000);
//                moveClose();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//            // 清除缓存
//            cacheMap.clear();
//            // 开启下一次任务
//            // 复位
//            // PLCUtil.writeInt16("VW1000", 3);
//            // sleep(3000)
//            // 归零
//            // PLCUtil.writeInt16("VW1000", 0);
//            // sleep(3000)
//            // 发送VW1000 为1-上位机发送启动
//            PLCUtil.writeInt16("VW1000", 1);
//            log.info("为1-上位机发送启动");
//
//        } else if (result == 9) {
//            // 为9正在往视觉处送料
//            log.info("接受 为9正在往视觉处送料");
//        } else if (result == 10) {
//            // 为10正在往玻璃管上料
//            log.info("接受 为10正在往玻璃管上料");
//        } else if (result == 11) {
//            // 为11机器人松开上料去安全位
//            log.info("接受 为11机器人松开上料去安全位");
//        } else if (result == 12) {
//            // 为12加热炉上升中
//            log.info("接受 为12加热炉上升中");
//        } else if (result == 13) {
//            // 为13加热炉下降中
//            log.info("接受 为13加热炉下降中");
//        } else if (result == 14) {
//            // 为14机器人下料移动中
//            log.info("接受 为14机器人下料移动中");
//        }
//
//
//        // 接收VW1006  告警信息，直接提示到页面
//        int warning = PLCUtil.readUInt16("VW1006");
//        log.info("接受 VW1006");
//        log.info("warning>>>>>>>>>>>：{}" + warning);
//        if (warning == 1) {
//            // 为1-机器人料中途掉了，没夹到料也属于中途掉料
//            log.error("为1-机器人料中途掉了");
////            if (result == 8) {
////                // 为7机器人下料玻璃管夹取料
////                log.info("机器人没夹到料或料掉了");
////                //关闭move、测量长度窗口
////                try {
////                    moveClose();
////                } catch (Exception e) {
////                    e.printStackTrace();
////                }
////            }
//
//            //发送VW1000 为3-复位
//            //PLCUtil.writeInt16("VW1000", 3);
////            try {
////                sleep(3000);
////                //归零
////                PLCUtil.writeInt16("VW1000", 0);
////                sleep(3000);
////                // 发送VW1000 为1-上位机发送启动
////                PLCUtil.writeInt16("VW1000", 1);
////                log.info("为1-上位机发送启动");
////            } catch (InterruptedException e) {
////                e.printStackTrace();
////            }
//        } else if (warning == 2) {
//            // 为2-无料请上料
//            log.error("为2-无料请上料");
//        } else if (warning == 3) {
//            // 为3-机器人报警
//            log.error("为3-机器人报警");
//        } else if (warning == 4) {
//            // 为4上料故障
//            log.error("为4上料故障");
//        }
//    }
//
//    /**
//     * 顶针压紧--点击mesure弹出窗口、输入长度、点击startlenth........
//     *
//     * @return
//     * @throws Exception
//     */
//    public Result needlePress() throws Exception {
//
//        // Python脚本路径及参数
//        String pythonScript = "D:\\zydm\\code\\sumimoto-rob\\doc\\needlePress.py";
//        pythnExcute(pythonScript);
//        return Result.success();
//    }
//
//    /**
//     * 顶针上升move
//     *
//     * @return
//     * @throws Exception
//     */
//    public Result needleMove() throws Exception {
//
//        log.info("needleMove-->>>>>>>>>>>>>>>>>>>>>");
//
//        // Python脚本路径及参数
//        String pythonScript = "D:\\zydm\\code\\sumimoto-rob\\doc\\needleMove.py";
//        pythnExcute(pythonScript);
//        return Result.success();
//    }
//
//    /**
//     * 关闭窗口，顶针会自动落下
//     *
//     * @return
//     * @throws Exception
//     */
//    public void moveClose() throws Exception {
//
//        log.info("moveClose-->>>>>>>>>>>>>>>>>>>>>");
//
//        // Python脚本路径及参数
//        String pythonScript = "D:\\zydm\\code\\sumimoto-rob\\doc\\moveClose.py";
//        pythnExcute(pythonScript);
//    }
//
//    /**
//     * start开始加热
//     *
//     * @return
//     * @throws Exception
//     */
//    public Result startHeating() throws Exception {
//
//        log.info("加热脚本执行=======================================================");
//
//        // Python脚本路径及参数
//        String pythonScript = "D:\\zydm\\code\\sumimoto-rob\\doc\\startHeating.py";
//        pythnExcute(pythonScript);
//        return Result.success();
//    }
//
//    public void pythnExcute(String path) throws Exception {
//        ProcessBuilder processBuilder = new ProcessBuilder("python", path);
//        Process process = processBuilder.start();
//
//        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//        StringBuilder output = new StringBuilder();
//        String line;
//
//        while ((line = reader.readLine()) != null) {
//            System.out.printf(line);
//            output.append(line).append("\n");
//        }
//
//        int exitCode = -1;
//        try {
//            exitCode = process.waitFor();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        } finally {
//            if (exitCode == 0) {
//                System.out.println("Python脚本成功运行！输出结果为:\n" + output.toString());
//            } else {
//                System.err.println("Python脚本运行失败！退出码为:" + exitCode);
//            }
//
//            process.destroy();
//        }
//    }
//}
